﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using extremeEvents.Data;
using extremeEvents.Componentes;

namespace extremeEvents.Eventos
{
    public partial class ListaCategorias : UserControl
    {
        public ListaCategorias()
        {
            InitializeComponent();
        }

        private void carregar()
        {

            try
            {
                //desactivar a geração das colunas de forma automática
                categoriasdataGridView.AutoGenerateColumns = false;

                //obter lista de categorias
                List<listarCategorias_Result> categorias = DLGenerica.Instance.listarCategorias();
                List<categoriasLinha> rows = new List<categoriasLinha>();

                //percorrer todos os utilizadores
                //para definir as linhas da tabela
                for (int i = 0; i < categorias.Count; i++)
                    rows.Add(new categoriasLinha
                    {
                        id_categoria = categorias[i].id_categoria,
                        numero_linha = i + 1,
                        descricao = categorias[i].descricao,
                        editar = "editar",
                        remover = "remover"
                    }
                   );
                //definir tabela
                categoriasdataGridView.DataSource = rows;


            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }


        /// <summary>
        /// Função chamada após formulário ser carregado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void categoriasdataGridView_Paint(object sender, PaintEventArgs e)
        {
            carregar();
        }

        private void categoriasdataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //verifica se nao foi clicado no header
            if (e.RowIndex != -1)
            {
                //obter o nome da coluna seleccionada
                var nome_columna = categoriasdataGridView.Columns[e.ColumnIndex].Name;

                //verifica se foi seleccionado a columna "editar"
                if (nome_columna == "editar")
                {

                    string cat = Microsoft.VisualBasic.Interaction.InputBox("Prompt",
                       "Editar categoria",
                       categoriasdataGridView.Rows[e.RowIndex].Cells["descricao"].Value.ToString(),
                       0,
                       0);

                    if (cat.Length == 0) {
                        MessageBox.Show("Categoria não editada");
                        return;
                    }

                    //editar categoria
                    var rst = DLGenerica.Instance.editarCategoria(
                        (int)categoriasdataGridView.Rows[e.RowIndex].Cells["id_categoria"].Value,
                        cat
                    );

                    //veririca se a categoria foi editada com sucesso
                    if (!rst)
                    {
                        MessageBox.Show("Erro 32: Occoreu um erro ao editar a categoria!");
                    }
                    else {
                        MessageBox.Show("Categoria editada com sucesso");
                        carregar();
                    }

                }
                //remover categoria
                else if (nome_columna == "remover") {

                    if (MessageBox.Show("Deseja remover a categoria \"" + categoriasdataGridView.Rows[e.RowIndex].Cells["descricao"].Value + "\"?", "Apagar categoria", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {

                        if (DLGenerica.Instance.removerCategoria((int)categoriasdataGridView.Rows[e.RowIndex].Cells["id_categoria"].Value))
                        {
                            MessageBox.Show("Categoria removida com sucesso");
                            carregar();
                        }
                        else {
                            MessageBox.Show("Erro 33: A categoria não pode ser removida");
                        }
                    }
                }
            }

        }

        /// <summary>
        /// Objecto utilizado para alimenter a tabela de eventos
        /// </summary>
        class categoriasLinha
        {
            public int id_categoria { get; set; }
            public string descricao { get; set; }
            public int numero_linha { get; set; }
            public string editar { get; set; }
            public string remover { get; set; }
        }
    }
}
